package erwiki.api.rss;

import erwiki.api.core.Engine;
import erwiki.api.core.WikiContext;
//import org.elwiki.api.GlobalPreferences;
import erwiki.api.exceptions.NoSuchVariableException;
import erwiki.api.variables.VariableManager;

public interface IFeed {

	/** Переменная Wiki, хранящая название блога. */
	public static final String VAR_BLOGNAME = "blogname";

	/**
	 * Добавляет в ленту новую запись (Entry), в конец списка.
	 *
	 * @param entry Запись для добавления.
	 */
	public void addEntry(IEntry entry);

	/**
	 * Возвращает XML для содержимого канала в String формате. Все подклассы должны реализовать метод.
	 *
	 * @return допустимый XML, готовый к отправке.
	 */
	String getString();

	/**
	 * @return Returns the m_channelDescription.
	 */
	String getChannelDescription();

	/**
	 * @param description The m_channelDescription to set.
	 */
	void setChannelDescription(String description);

	/**
	 * @return Returns the m_channelLanguage.
	 */
	String getChannelLanguage();

	/**
	 * @param language The m_channelLanguage to set.
	 */
	void setChannelLanguage(String language);

	/**
	 * @return Returns the m_channelTitle.
	 */
	String getChannelTitle();

	/**
	 * @param title The m_channelTitle to set.
	 */
	void setChannelTitle(String title);

	/**
	 * @return Returns the m_feedURL.
	 */
	String getFeedURL();

	/**
	 * @param feedurl The m_feedURL to set.
	 */
	void setFeedURL(String feedurl);

	/**
	 * Производит название сайта для новостной ленты.</br>
	 * Или извлекает его из переменной Вики.
	 *
	 * @param вики-context.
	 * @return Название сайта.
	 */
	public static String getSiteName(WikiContext context) {
		final Engine engine = context.getEngine();
		VariableManager variableManager = engine.getManager(VariableManager.class);

		String blogname = null;

		try {
			blogname = variableManager.getValue(VAR_BLOGNAME);
		} catch (final NoSuchVariableException e) {
		}

		if (blogname == null) {
			blogname = engine.getApplicationName() + ": " + context.getPage().getName();
		}

		return blogname;
	}

}
